package com.biz.primus.ms.commodity.dao.redis;

import com.biz.primus.base.redis.CrudRedisDao;
import com.biz.primus.base.redis.util.RedisUtil;
import com.biz.primus.ms.commodity.dao.ro.ProductCascadeItemRo;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Set;

/**
 * 关联商品项RedisDao
 *
 * @author david-liu
 * @date 2016年08月18日
 * @reviewer
 * @see
 */
@Repository
public class ProductCascadeItemRedisDao extends CrudRedisDao<ProductCascadeItemRo, Long> {

    /**
     * 通过关联商品ID获取关联商品项
     *
     * @param productCascadeId 关联商品ID
     * @return 关联商品项列表
     */
    public List<ProductCascadeItemRo> findProductCascadeItems(Long productCascadeId) {
        String productCascadeIdCascadeItemsSortedSetKey = getProductCascadeIdCascadeItemsSortedSetKey(productCascadeId);
        return findByIds(zRange(productCascadeIdCascadeItemsSortedSetKey, 0, -1));
    }


    @Override
    public void save(ProductCascadeItemRo ro) {
        super.save(ro);
    }

    public void delete(Long productId){
        final String key = this.getProductCascadeIdCascadeItemsSortedSetKey(productId);
        final Set<byte[]> bytes = zRange(key, 0, -1);
        if(CollectionUtils.isNotEmpty(bytes)){
            final List<Long> ids = RedisUtil.bytesSetToLongList(bytes);
            for (Long id : ids) {
                super.delete(id);
            }
        }
        zremrangeByRank(key, 0, -1);
    }

    /**
     * 获取关联商品ID关联商品项SortedSetKey
     *
     * @param productCascadeId 关联商品ID
     * @return 关联商品项SortedSetKey
     */
    private String getProductCascadeIdCascadeItemsSortedSetKey(Long productCascadeId) {
        return getFieldSortedSetKey("cascadeProductId", productCascadeId);
    }

}
